select xx.*,xx.cmm/xx.ggm cons_medio_std
from (




select x.bolletta,x.contratto,x.quantita,x.data_i,x.data_f,x.gg,x.codice_ac,
case when x.m_i < x.m_f
then

(SELECT SUM(DECODE (cm.NUMERO_MESE,1,31,2,28,3,31,4,30,5,31,6,30,7,31,8,31,9,30,10,31,11,30,31)) 
FROM db5.forniture_cmm cm 
WHERE 
 cm.CODICE_GESTIONE in ('UNRG','ASM')
and cm.CODICE_SERVIZIO='E'
--and cm.CODICE_CONTRATTO=18325
and cm.CODICE_CONTRATTO=x.contratto
and (cm.NUMERO_MESE >= x.m_i
and CM.NUMERO_MESE <= x.m_f)
and cm.TIPO_MISURATORE='R1'
and cm.CONSUMO_MEDIO_MENSILE <>0
group by codice_contratto)
else 
(SELECT SUM(DECODE (cm.NUMERO_MESE,1,31,2,28,3,31,4,30,5,31,6,30,7,31,8,31,9,30,10,31,11,30,31)) 
FROM db5.forniture_cmm cm 
WHERE 
 cm.CODICE_GESTIONE in ('UNRG','ASM')
and cm.CODICE_SERVIZIO='E'
--and cm.CODICE_CONTRATTO=18325
and cm.CODICE_CONTRATTO=x.contratto
and (cm.NUMERO_MESE >= x.m_i
or  CM.NUMERO_MESE <= x.m_f)
and cm.TIPO_MISURATORE='R1'
and cm.CONSUMO_MEDIO_MENSILE <>0
group by codice_contratto)
end
ggm,



case when x.m_i < x.m_f
then

(SELECT SUM(CM.CONSUMO_MEDIO_MENSILE) 
FROM db5.forniture_cmm cm 
WHERE 
 cm.CODICE_GESTIONE in ('UNRG','ASM')
and cm.CODICE_SERVIZIO='E'
--and cm.CODICE_CONTRATTO=18325
and cm.CODICE_CONTRATTO=x.contratto
and cm.NUMERO_MESE >= x.m_i
and CM.NUMERO_MESE <= x.m_f
and cm.TIPO_MISURATORE in('R1','R2','R3')
group by codice_contratto)
else 
(SELECT SUM(CM.CONSUMO_MEDIO_MENSILE)
FROM db5.forniture_cmm cm 
WHERE 
 cm.CODICE_GESTIONE in ('UNRG','ASM')
and cm.CODICE_SERVIZIO='E'
--and cm.CODICE_CONTRATTO=18325
and cm.CODICE_CONTRATTO=x.contratto
and (cm.NUMERO_MESE >= x.m_i
or  CM.NUMERO_MESE <= x.m_f)
and cm.TIPO_MISURATORE in('R1','R2','R3')
group by codice_contratto)
end
cmm,


case when gg = 0 then 0 else x.quantita/gg end cons_medio


from (


select to_char(bo.codice_bolletta) bolletta,cp.CODICE_RIFERIMENTO contratto, 
sum(cp.quantita_periodo) quantita, 

min(cp.DATA_INIZIO_PERIODO) data_i, to_char(min(cp.DATA_INIZIO_PERIODO),'mm') m_i, 
max(cp.DATA_FINE_PERIODO) data_f, to_char(max(cp.DATA_fine_PERIODO),'mm') m_f,



max(cp.DATA_FINE_PERIODO)-min(cp.DATA_INIZIO_PERIODO) gg,
bf.CODICE_AC



from bollette bo,competenze_periodi cp,competenze_voci cv,bollette_forniture bf
where 
  bo.ANNO_BOLLETTAZIONE= ^Anno Bollettazione aaaa;N;Numerico^^
  AND bo.mese_BOLLETTAZIONE= ^Mese Bollettazione mm;N;Numerico^^
   AND bo.progressivo_BOLLETTAZIONE= ^Progressivo Bollettazione pp;N;Numerico^^
and bo.codice_gestione = cv.codice_gestione
and bo.CODICE_BOLLETTA= cv.CODICE_COMPETENZA
and cv.CODICE_ORIGINE_COMPETENZA = 'B'
--and cv.CODICE_SERVIZIO='E'
and CV.codice_voce in ('030')
and cv.CODICE_SERVIZIO=cp.CODICE_SERVIZIO
and cp.CODICE_GESTIONE=cv.CODICE_GESTIONE
and cp.CODICE_COMPETENZA=cv.CODICE_COMPETENZA
and cp.CODICE_RIFERIMENTO=cv.CODICE_RIFERIMENTO
and cp.PROGRESSIVO_VOCE=cv.PROGRESSIVO_VOCE
and bo.CODICE_TIPO_BOLLETTA <> 'S'
and bf.CODICE_BOLLETTA= bo.CODICE_BOLLETTA
and bf.CODICE_GESTIONE = bo.CODICE_GESTIONE
and bf.CODICE_SERVIZIO= cv.CODICE_SERVIZIO
--AND BO.CODICE_BOLLETTA=11003951


group by   bo.codice_bolletta,cp.CODICE_RIFERIMENTO,bf.codice_ac
)x
where x.gg > 0
and x.quantita <>0
)XX


where (
cons_medio >=(xx.cmm/xx.ggm) *1.5
     or cons_medio <=(xx.cmm/xx.ggm) /1.5)
     and (xx.cmm/xx.ggm) >0


